/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package hit.ui; import hit.core.*; //import java.awt.Color; import java.io.*; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import javax.swing.table.DefaultTableModel; /** * * @author songmingye */ public class Syntax_Frame extends javax.swing.JFrame { /** * Creates new form Syntax_Frame */ public Syntax_Frame() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); text_area = new javax.swing.JTextArea(); jLabel1 = new javax.swing.JLabel(); Syntax_button = new javax.swing.JButton(); analysis_button = new javax.swing.JButton(); clean_button = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); production_table = new javax.swing.JTable(); jScrollPane3 = new javax.swing.JScrollPane(); result_table = new javax.swing.JTable(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); read_button = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); text_area.setColumns(20); text_area.setRows(5); jScrollPane1.setViewportView(text_area); jLabel1.setText("代码区"); Syntax_button.setText("导入文法"); Syntax_button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Syntax_buttonActionPerformed(evt); } }); analysis_button.setText("句法分析"); analysis_button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { analysis_buttonActionPerformed(evt); } }); clean_button.setText("清空文本"); clean_button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { clean_buttonActionPerformed(evt); } }); production_table.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null} }, new String [] { "编号", "产生式", "select集" } )); jScrollPane2.setViewportView(production_table); result_table.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null} }, new String [] { "栈内元素", "输入缓冲区", "说明" } )); jScrollPane3.setViewportView(result_table); jLabel2.setText("产生式select集"); jLabel3.setText("句法分析区"); read_button.setText("导入文本"); read_button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { read_buttonActionPerformed(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(23, 23, 23) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel3) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(jScrollPane3) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 515, Short.MAX_VALUE) .addGap(30, 30, 30) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(Syntax_button) .addComponent(analysis_button) .addComponent(clean_button) .addComponent(read_button, javax.swing.GroupLayout.Alignment.LEADING))) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel1) .addGap(0, 0, Short.MAX_VALUE))) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 472, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(jLabel2)) .addGap(4, 4, 4) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jScrollPane1) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(Syntax_button) .addGap(45, 45, 45) .addComponent(read_button) .addGap(41, 41, 41) .addComponent(analysis_button) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE) .addComponent(clean_button) .addGap(26, 26, 26)) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(172, 172, 172)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 10, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 607, javax.swing.GroupLayout.PREFERRED_SIZE) ); pack(); }// </editor-fold>//GEN-END:initComponents private void analysis_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_analysis_buttonActionPerformed // TODO add your handling code here: int rowIndex = 0; /*****初始化****/ syntax_analysis.derived_strings.push("<s>"); result_table.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null}, {null, null, null} }, new String [] { "栈内元素", "输入缓冲区", "说明" } )); /***********/ String content = text_area.getText(); lexical_analysis = new Lexical(); lexical_analysis.Lexical_Analysis(content); ArrayList<Token> list = (ArrayList) lexical_analysis.Token_List.clone(); do{ Object[] new_row = new Object[3]; new_row[0] = "$"; new_row[1] = ""; for(String s : syntax_analysis.derived_strings){ new_row[0] = s+new_row[0]; } for(Token t : list){ new_row[1] += Syntax.Token_Code[t.code]+" "; } new_row[1] = new_row[1]+"$"; syntax_analysis.Syntax_Analysis(list); DefaultTableModel tableModel = (DefaultTableModel) result_table.getModel(); new_row[2] = syntax_analysis.explaination; tableModel.insertRow(rowIndex, new_row); //result_table.getCellEditor(rowIndex, 2).getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column).setBackground(Color.red); rowIndex++; }while(!syntax_analysis.explaination.equals("结束")); }//GEN-LAST:event_analysis_buttonActionPerformed private void Syntax_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Syntax_buttonActionPerformed // TODO add your handling code here: syntax_analysis = new Syntax(); syntax_analysis.create_list(); syntax_analysis.create_first(); syntax_analysis.create_follow(); syntax_analysis.create_select(); syntax_analysis.create_predict_map(); int len = syntax_analysis.production_list.size(); Object[][] e = new Object[len][3]; for(int i=0;i<len;i++){ Production p = syntax_analysis.production_list.get(i); e[i][0] = p.num; e[i][1] = p.left+"->"; e[i][2] = ""; for(String s : p.right){ e[i][1] += s; } for(String s : p.select){ e[i][2] += s+" "; } } production_table.setModel(new javax.swing.table.DefaultTableModel( e, new String [] { "编号", "产生式", "select集" } )); }//GEN-LAST:event_Syntax_buttonActionPerformed private void clean_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clean_buttonActionPerformed // TODO add your handling code here: text_area.setText(null); }//GEN-LAST:event_clean_buttonActionPerformed private void read_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_read_buttonActionPerformed // TODO add your handling code here: JFileChooser fd = new JFileChooser(); //fd.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fd.showOpenDialog(null); String temp=""; File f = fd.getSelectedFile(); if(f != null){ InputStream is = null; try { is = new FileInputStream(f); } catch (FileNotFoundException ex) { Logger.getLogger(Syntax_Frame.class.getName()).log(Level.SEVERE, null, ex); } InputStreamReader fr = new InputStreamReader(is); int ch = 0; try { while((ch = fr.read())!=-1 ){ temp += (char)ch; } } catch (IOException ex) { Logger.getLogger(Syntax_Frame.class.getName()).log(Level.SEVERE, null, ex); } text_area.setText(temp); } }//GEN-LAST:event_read_buttonActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Syntax_Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Syntax_Frame().setVisible(true); } }); } private Syntax syntax_analysis; private Lexical lexical_analysis; // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton Syntax_button; private javax.swing.JButton analysis_button; private javax.swing.JButton clean_button; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JTable production_table; private javax.swing.JButton read_button; private javax.swing.JTable result_table; private javax.swing.JTextArea text_area; // End of variables declaration//GEN-END:variables }